package persistores.persistoresDeVehiculo;

import vehiculos.Vehiculo;
import ciudad.Ciudad;
import ciudad.Esquina;


public class VehiculoPersistor {
	
	/* Serializa el vehiculo.
	 * Pre: Recibe el vehiculo a serializar, una ciudad y un archivo. */
	public void serializar(Vehiculo vehiculoASerializar, Ciudad ciudad, String archivo) {
		/* Se crea el vehiculo adaptador*/
		VehiculoAdaptador adaptador = new VehiculoAdaptador();
		adaptador.adaptar(vehiculoASerializar, ciudad);
		
		VehiculoAdaptadorPersistor persistor = new VehiculoAdaptadorPersistor();
		persistor.serializar(adaptador, archivo);
	}

	/* Deserializa el vehiculo. 
	 * Pre: Recibe una ciudad y un archivo. 
	 * Post: Devuelve un vehiculo deserializado.*/
	public Vehiculo deserializar(Ciudad ciudad, String archivo) {
		VehiculoAdaptadorPersistor persistor = new VehiculoAdaptadorPersistor();
		VehiculoAdaptador adaptador = persistor.deserializar(archivo);

		return convertirAVehiculo(adaptador, ciudad);
	}

	/* Convierte el vehiculo adaptador a vehiculo.
	 * Pre: Recibe un vehiculo del tipo adaptador y una ciudad.
	 * Post: Devuelve un vehiculo.*/
	private Vehiculo convertirAVehiculo(VehiculoAdaptador adaptador, Ciudad ciudad) {
		Vehiculo vehiculo = new Vehiculo();
		vehiculo.setTipoDeVehiculo(adaptador.getTipoDeVehiculo());
		vehiculo.setCantidadDeMovimientos(adaptador.getCantidadDeMovimientos());
		
		int indiceFila = adaptador.getPosicionFila();
		int indiceColumna = adaptador.getPosicionColumna();
		
		Esquina esquinaActual = ciudad.getEsquinaEnPosicion(indiceFila, indiceColumna);
		vehiculo.setEsquinaActual(esquinaActual);
		
		return vehiculo; 
	}
}
